package com.group01.community.utils;

/**
 * @Description: TODO
 * @Author: mis_wu
 * @Date: 2025/5/17
 * @Company xxx
 **/
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.net.InetAddress;
import java.util.UUID;

/** * 文件上传 * * @author YangXiuTeng * @date Jun 1, 2015 */
@Component
public class UploadFileUtil {


    /** * 项目端口 */
    @Value("${server.port}")
    private String port;

    /** * 项目路径 */
    @Value("${server.servlet.context-path}")
    private String contextPath;

    /** * 上传文件 * * @param multipartFile 文件对象 * @param dir 上传目录 * @return */
    public ResponseResult<String> uploadFile(MultipartFile multipartFile, String dir) {

        try {

            if (multipartFile.isEmpty()) {

                return ResponseResult.error("请选择文件");
            }
            // 获取文件的名称
            String originalFilename = multipartFile.getOriginalFilename();
            // 文件后缀 例如：.png
            assert originalFilename != null : "无法获取到文件名称，请选择正确文件上传";
            String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // uuid 生成文件名
            String uuid = String.valueOf(UUID.randomUUID());
            // 根路径，在 resources/static/upload
            String basePath = ResourceUtils.getURL("classpath:").getPath() + "static/upload/" + (StringUtils.isNotBlank(dir) ? (dir + "/") : "");
            // 新的文件名，使用uuid生成文件名
            String fileName = uuid + fileSuffix;
            // 创建新的文件
            File fileExist = new File(basePath);
            // 文件夹不存在，则新建
            if (!fileExist.exists()) {

                boolean mkdirs = fileExist.mkdirs();
            }
            // 获取文件对象
            File file = new File(basePath, fileName);
            // 完成文件的上传
            multipartFile.transferTo(file);
            // 返回绝对路径
            return ResponseResult.ok("http://" + InetAddress.getLocalHost().getHostAddress() + ":" + port + contextPath + "/upload/" + fileName);
        } catch (Exception e) {

            e.printStackTrace();
        }
        return ResponseResult.error("上传失败");
    }
}